package com.hbt.android.kotlin.learn


/**
 * if 表达式
 * 一个 if 语句包含一个布尔表达式和一条或多条语句
 */
fun conditionIf() {
    // 传统用法
    var a = 1
    var b = 2
    var max: Int
    if (a < b) max = b

    // 使用else
    if (a > b) {
        max = a
    } else {
        max = b
    }

    // 作为表达式
    // 这也说明我也不需要像Java那种有一个三元操作符，因为我们可以使用它来简单实现：
    // val c = if (condition) a else b
    max = if (a > b) a else b


    // 使用区间
    if (a in 1..3) {
        println(a)
    }

}


/**
 * when 表达式
 * when 将它的参数和所有的分支条件顺序比较，直到某个分支满足条件。
 * when 既可以被当做表达式使用也可以被当做语句使用。
 * 如果它被当做表达式，符合条件的分支的值就是整个表达式的值，如果当做语句使用， 则忽略个别分支的值。
 * when 类似其他语言的 switch 操作符
 */
fun conditionWhen() {

    // 如果它被当做表达式，符合条件的分支的值就是整个表达式的值，如果当做语句使用， 则忽略个别分支的值。
    // when 类似其他语言的 switch 操作符
    val x = 1
    when (x) {
        1 -> print("x == 1")
        2 -> print("x == 2")
        else -> { // 注意这个块
            print("x 不是 1 ，也不是 2")
        }
    }


    // 在 when 中，else 同 switch 的 default。如果其他分支都不满足条件将会求值 else 分支。
    // 如果很多分支需要用相同的方式处理，则可以把多个分支条件放在一起，用逗号分隔
    when (x) {
        0, 1 -> println("x == 0 or x == 1")
        else -> println("other")
    }


    // 我们也可以检测一个值在（in）或者不在（!in）一个区间或者集合中
    when (x) {
        in 1..10 -> println("x is in the range")
//        in validNumbers -> println("x is valid")
        !in 10..20 -> println("x is outside the range")
        else -> println("none of the above")
    }
}



